﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using LogicaNegocio;
using Entidades;

namespace PresentacionEscritorio
{
    public partial class frmRegistrarPagoMedico : Form
    {
        EspecialidadMedico espMedSeleccionada;
        float total;


        public frmRegistrarPagoMedico()
        {
            InitializeComponent();
        }

        private void frmRegistrarPagoMedico_Load(object sender, EventArgs e)
        {
            timer1.Start();
            cargarGrillaMedicos();
            btnImprimir.Visible = false;
        }

        private void cargarGrillaMedicos()
        {
            GestorMedicos gm = new GestorMedicos();
            List<EspecialidadMedico> lst = gm.obtenerMedicosDiaDeHoy();
            if (lst != null)
            {
                foreach (EspecialidadMedico item in lst)
                {
                    int fila = grdMedico.Rows.Add();
                    grdMedico.Rows[fila].Cells["Legajo"].Value = item.LegajoMedico;
                    grdMedico.Rows[fila].Cells["Documento"].Value = item.Medico.NroDocumento;
                    grdMedico.Rows[fila].Cells["Medico"].Value = item.ApellidoNombreMedico;
                    grdMedico.Rows[fila].Cells["Especialidad"].Value = item.NombreEspecialidad;
                    grdMedico.Rows[fila].Cells["NroMatricula"].Value = item.NumeroMatriculaEspecialidad;
                    grdMedico.Rows[fila].Cells["CodEspecialidad"].Value = item.CodEspecialidad;
                    grdMedico.Rows[fila].Cells["IdTipoAtencion"].Value = item.IdTipoModalidadAtencion;
                }
            }
            else
                MessageBox.Show("No hay médicos registrados con horarios de atención para el dia de semana de hoy", "Informacion");
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            txtFechaHora.Text = DateTime.Now.ToString();
        }

        private void grdMedico_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            if (grdMedico.CurrentCell.OwningColumn == grdMedico.Columns["Seleccionar"])
            {
                espMedSeleccionada = new EspecialidadMedico();
                espMedSeleccionada.CodEspecialidad = int.Parse(grdMedico.CurrentRow.Cells["CodEspecialidad"].Value.ToString());
                espMedSeleccionada.LegajoMedico = long.Parse(grdMedico.CurrentRow.Cells["Legajo"].Value.ToString());
                espMedSeleccionada.IdTipoModalidadAtencion = int.Parse(grdMedico.CurrentRow.Cells["IdTipoAtencion"].Value.ToString());
                cargarGrillaAtencionesMedicoSeleccionado();
            }
        }

        private void cargarGrillaAtencionesMedicoSeleccionado()
        {
            total = 0;
            //buscamos segun el tipo de modalidad (turnos/orden llegada) las atenciones realizadas
            if (espMedSeleccionada.IdTipoModalidadAtencion == 1) //turno
            {
                List<Turno> listTurnos = GestorAgendaTurnos.obtenerTurnosAtendidosHoyMedico(espMedSeleccionada.CodEspecialidad, espMedSeleccionada.LegajoMedico);
                if (listTurnos != null)
                {
                    foreach (Turno item in listTurnos)
                    {
                        if (item.TotalMedico == 0)
                            item.TotalMedico = GestorEspecialidades.ObtenerPrecioMedicoEspecialidad(item.IdEspecialidad);

                        int i = grdAtencionesDelDia.Rows.Add();
                        grdAtencionesDelDia.Rows[i].Cells["fechaAtencion"].Value = item.FechaTurno.ToShortDateString() + item.HoraTurno.ToString();
                        grdAtencionesDelDia.Rows[i].Cells["nombrePaciente"].Value = item.NombreCompletoPaciente;
                        grdAtencionesDelDia.Rows[i].Cells["descripcion"].Value = "Consulta";
                        grdAtencionesDelDia.Rows[i].Cells["monto"].Value = item.TotalMedico;
                        grdAtencionesDelDia.Rows[i].Cells["IdTurno"].Value = item.IdTurno;

                        total += item.TotalMedico;
                    }
                    txtTotal.Text = total.ToString();
                }
                else
                    MessageBox.Show("No hay turnos atendidos para este doctor hoy");
            }
            else //orden de llegada
            {
                //List<Turno> listTurnos = GestorAgendaTurnos.obtenerTurnosAtendidosHoyMedico(espMedSeleccionada.CodEspecialidad, espMedSeleccionada.LegajoMedico);
                //if (listTurnos != null)
                //{
                //    foreach (Turno item in listTurnos)
                //    {
                //        if (item.TotalMedico == 0)
                //            item.TotalMedico = GestorEspecialidades.ObtenerPrecioMedicoEspecialidad(item.IdEspecialidad);

                //        int i = grdAtencionesDelDia.Rows.Add();
                //        grdAtencionesDelDia.Rows[i].Cells["fechaAtencion"].Value = item.FechaTurno.ToShortDateString() + item.HoraTurno.ToString();
                //        grdAtencionesDelDia.Rows[i].Cells["nombrePaciente"].Value = item.NombreCompletoPaciente;
                //        grdAtencionesDelDia.Rows[i].Cells["descripcion"].Value = "Consulta";
                //        grdAtencionesDelDia.Rows[i].Cells["monto"].Value = item.TotalMedico;
                //        grdAtencionesDelDia.Rows[i].Cells["IdTurno"].Value = item.IdTurno;

                //        total += item.TotalMedico;
                //    }
                //    txtTotal.Text = total.ToString();
                //}
                //else
                //    MessageBox.Show("No hay turnos atendidos para este doctor hoy");
            }
            
        }

        private void btnAceptar_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(txtTotalLetras.Text))
            {
                MessageBox.Show("Debe ingresar el monto total en letras");
            }
            else
            {
                string totalEnLetras = txtTotalLetras.Text;
                
                PagoMedico pm = new PagoMedico();
                pm.FechaAtencion = DateTime.Now;
                pm.FechaPago = DateTime.Now;
                pm.IdEspecialidad = espMedSeleccionada.CodEspecialidad;
                pm.LegajoMedico = espMedSeleccionada.LegajoMedico;
                pm.NombreCompletoMedico = espMedSeleccionada.ApellidoNombreMedico;
                pm.NombreEspecialidad = espMedSeleccionada.NombreEspecialidad;
                pm.Total = total;
                pm.TotalenLetras = totalEnLetras;

                pm.DetallePagoMedico = new List<DetallePagoMedico>();
                DetallePagoMedico dpm = null;
                for (int i = 0; i < grdAtencionesDelDia.RowCount; i++)
                {
                    dpm = new DetallePagoMedico();
                    dpm.Concepto = grdAtencionesDelDia.Rows[i].Cells["detalle"].ToString() + " " + grdAtencionesDelDia.Rows[i].Cells["nombrePaciente"].ToString();
                    dpm.Monto = float.Parse(grdAtencionesDelDia.Rows[i].Cells["Monto"].ToString());
                    if (espMedSeleccionada.IdTipoModalidadAtencion == 1)
                        dpm.IdTurno = long.Parse(grdAtencionesDelDia.Rows[i].Cells["IdTurno"].ToString());
                    else
                        dpm.IdItemListado = long.Parse(grdAtencionesDelDia.Rows[i].Cells["IdItemOrdenLlegada"].ToString());

                    pm.DetallePagoMedico.Add(dpm);
                }

                //guardamos en la BD
                bool res = GestorPagosMedicos.registrarPagoMedico(pm);
                if (res)
                {
                    MessageBox.Show("Se registró exitosamente el pago al médico");
                    btnImprimir.Visible = true;
                }
                else
                    MessageBox.Show("No se ha podido registrar el pago al medico");
            }
        }
    }
}
